% \iffalse meta-comment
%
% Copyright (C) 2015-2018 by Wenbo Sheng <wbsheng@fudan.edu.cn>
% -----------------------------------------------------------------------
%
%	This work may be distributed and/or modified under the
%	conditions of the LaTeX Project Public License, either version 1.3c
%	of this license or (at your option) any later version. 
%	This version of this license is in
%		http://www.latex-project.org/lppl/lppl-1-3c.txt
%	and the latest version of this license is in
%		http://www.latex-project.org/lppl.txt
%	and version 1.3 or later is part of all distributions of
%	LaTeX version 2005/12/01 or later.
%
%	This work has the LPPL maintenance status `maintained'.
%
%	The Current Maintainers of this work is Wenbo Sheng.
%
%	This work consists of the files fduthesis.dtx and fduthesis.ins
%	and the derived filebase fduthesis.cls.
%
% \fi
% \iffalse
%<class>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<class>\ProvidesClass{fduthesis}
%<class> [2018/01/13, v0.9b, LaTeX class for the thesis template (PhD or master) at Fudan University]
%<*driver>
\documentclass{ltxdoc}
\usepackage[UTF8]{ctex}
^^A\usepackage{ltxdockit}
\usepackage{etoolbox}
\usepackage{xspace}
\usepackage{amsmath}
\usepackage{geometry}
\usepackage{booktabs}
\usepackage{hologo}
\usepackage{hypdoc}
^^A \geometry{vmargin={10mm,15mm},hmargin={25mm,15mm}}
^^A
^^A\newcommand*{\marglistfont}{\bfseries}
^^A\newcommand*{\margnotefont}{}
^^A\newcommand*{\optionlistfont}{\bfseries}
^^A\newcommand*{\ltxsyntaxfont}{\ttfamily}
^^A\newcommand*{\ltxsyntaxlabelfont}{\bfseries}
^^A\newcommand*{\changelogfont}{\normalfont}
^^A\newcommand*{\changeloglabelfont}{\bfseries}
^^A\newcommand*{\verbatimfont}{\ttfamily}
^^A\newcommand*{\displayverbfont}{\ttfamily}
^^A
^^A % from ltxdockit.sty
\renewrobustcmd*{\cs}[1]{\mbox{\ttfamily\textbackslash#1}}
\renewrobustcmd*{\cmd}[1]{\mbox{\ttfamily\textbackslash#1}}
\newrobustcmd*{\env}[1]{\mbox{\ttfamily#1}}
\newrobustcmd*{\len}[1]{\mbox{\ttfamily\textbackslash#1}}
\newrobustcmd*{\cnt}[1]{\mbox{\ttfamily#1}}
\newrobustcmd*{\prm}[1]{%
	\ifblank{#1}
	{}
	{\mbox{%
			\ensuremath\langle
			\normalfont\textit{#1}%
			\ensuremath\rangle}}}
\newrobustcmd*{\mprm}[1]{%
	\mbox{%
		{\ttfamily\{}\prm{#1}%
		{\ttfamily\}}}}
\newrobustcmd*{\oprm}[1]{%
	\mbox{%
		{\ttfamily[}\prm{#1}%
		{\ttfamily]}}}
\newrobustcmd*{\opt}[1]{\mbox{\ttfamily#1}}
\newrobustcmd*{\pkg}[1]{\mbox{\ttfamily#1}}
^^A\newrobustcmd*{\kvopt}[2]{{%
^^A		\ttfamily#1\penalty\@M
^^A		\hskip 0em plus 0.15em\relax
^^A		=\penalty\hyphenpenalty
^^A		\hskip 0em plus 0.15em\relax #2}}
\newrobustcmd*{\kvopt}[2]{\mbox{\ttfamily#1=#2}}
\csdef{*}{\textasteriskcentered}
\newrobustcmd*{\file}[1]{\mbox{\ttfamily#1}}
\newrobustcmd*{\sty}[1]{\mbox{\ttfamily#1}}
\newrobustcmd*{\bin}[1]{\mbox{\ttfamily#1}}
\newrobustcmd*{\acr}[1]{\mbox{%
		\ifx\f@family\rmdefault
		\textsc{\MakeLowercase{#1}}%
		\else
		#1%
		\fi}}
\newrobustcmd*{\keyval}{%
	\begingroup\ttfamily
	\prm{key}=\penalty\hyphenpenalty
	\prm{value}\endgroup
	\xspace}
\def\XeTeX{\hologo{XeTeX}\xspace}
\def\XeLaTeX{\hologo{XeLaTeX}\xspace}
\def\LuaTeX{\hologo{LuaTeX}\xspace}
\def\LuaLaTeX{\hologo{LuaLaTeX}\xspace}
\def\pdfTeX{\hologo{pdfTeX}\xspace}
\def\pdfLaTeX{\hologo{pdfLaTeX}\xspace}
%\EnableCrossrefs 
%\CodelineIndex
\DisableCrossrefs
\RecordChanges
\begin{document}
\DocInput{\jobname.dtx}%\PrintChanges
\end{document}
%</driver>
% \fi
%
% \CheckSum{0}
%
% \CharacterTable
%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%   Digits        \0\1\2\3\4\5\6\7\8\9
%   Exclamation   \!     Double quote  \"     Hash (number) \#
%   Dollar        \$     Percent       \%     Ampersand     \&
%   Acute accent  \'     Left paren    \(     Right paren   \)
%   Asterisk      \*     Plus          \+     Comma         \,
%   Minus         \-     Point         \.     Solidus       \/
%   Colon         \:     Semicolon     \;     Less than     \<
%   Equals        \=     Greater than  \>     Question mark \?
%   Commercial at \@     Left bracket  \[     Backslash     \\
%   Right bracket \]     Circumflex    \^     Underscore    \_
%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%   Right brace   \}     Tilde         \~}
% \changes{v0.91}{2015/12/20}{Initial version} %
% \GetFileInfo{fduthesis.cls} %
% \DoNotIndex{list of control sequences} %
% \title{The \textsf{fduthesis} class \thanks{This document
% corresponds to \textsf{fduthesis}~\fileversion,
%   dated \filedate.}}
% \author{Wenbo Sheng \\ \texttt{wbsheng AT fudan.edu.cn}} %
% \date{\filedate}
% \maketitle
%
% \begin{abstract}
%   本模板 \textsf{fduthesis} 由盛文博创建维护，旨在为复旦大学硕博毕业论文写作提供一个方便易用的 \LaTeX{} 模板。
% \end{abstract}
%
% \section{简介}
%
% Put text here.
%
% \section{使用说明}
%
% \subsection{下载安装}

% \subsection{依赖与编译要求}
%
% 本模板所需的各项依赖和要求包括如下几个方面。
% 
% \begin{description}
%     \item[操作系统] 本模板对操作系统无特殊要求。
%     但要注意的是，由于在Linux系统上缺少适合排版的全套中文字体，因此将使用fandol字体，可能会降低排版质量。
%     已经测试或运行的系统包括 
%    \begin{itemize}
%         \item Windows (7, 10)
%         \item Mac OS  (10.12 Sierra, 10.13 High Sierra)
%         \item Linux (Ubuntu 16.04, Linux Mint 18.x, Linux Deepin 15.3+, Fedora 25+)
%     \end{itemize}
%     \item[\TeX{} 发行版] TeXLive2017，或更新到冻结版本的 TeXLive 2016。
%     在 Mac OS 下为 MacTeX 各对应版本。
%     \item[编译方式] 本模板支持如下几种编译方式：
%     \begin{itemize}
%         \item \XeLaTeX
%         \item \pdfLaTeX
%         \item \LaTeX{} + DVIPDFmx
%     \end{itemize}
%     各编译方式对操作系统、字体等支持有所不同，基于技术先进性和稳定性推荐使用 \XeLaTeX 编译方式。
%     \item[文档类与宏包] 本模板依赖以下一些文档类与宏包，在常见的 \TeX{} 发行版中都已包含，无需特殊配置。
%     \begin{center}
%     \sffamily
%     \begin{tabular}{cccc}
%         \toprule 
%         kvoptions & etoolbox & xstring & ifxetex \\
%         ifpdf & xparse & environ & ctexrep \\
%         geometry & microtype & fancyhdr & graphicx \\
%         amsmath & amssymb & mathtools & ntheorem \\
%         array & tabularx & booktabs & calc \\
%         caption & epstopdf & bmpsize & lineno \\
%         bm & hyperref & & \\
%         \bottomrule
%     \end{tabular}
%     \end{center}
%     以上列出的宏包并非总是需要的，也与编译方式有关（例如使用 \XeLaTeX 编译时就不使用 \pkg{microtype}、\pkg{epstopdf}、\pkg{bmpsize}等宏包）。
%     另外，这些宏包和文档类的依赖宏包不再赘述。
%     \item[编码] 本模板只支持 UTF8 编码撰写源文件，不支持GB系列编码（GB2312、GBK、GB18030、cp936等）。
% \end{description}

% 总之，本模板的推荐编译方式为：Windows/Mac OS 系统、UTF8编码、在 TeXLive 2016+（ Full版本）下使用 \XeLaTeX 编译方式。

% \subsection{示例文件}

% \subsection{文档选项}

% \subsection{定制命令与环境}
%
% \section{代码实现}
%
%    \begin{macrocode}
%<*class>
%    \end{macrocode}
%
% 一些 \TeX{} 编程宏包
%    \begin{macrocode}
\RequirePackage{kvoptions}
\RequirePackage{etoolbox}
\RequirePackage{xstring}
\RequirePackage{ifxetex}
\RequirePackage{ifpdf}
\RequirePackage{xparse}
\RequirePackage{environ}
%    \end{macrocode}
%
%\subsection{选项设置}
% 文档类选项设置，并将相关选项传递给 |\@clsname| （即 \sty{ctexrep}）。
%    \begin{macrocode}
\SetupKeyvalOptions{family=FDU, prefix=FDU@, setkeys=\kvsetkeys}
\def\FDU@setopt{\kvsetkeys{FDU}}
%    \end{macrocode}
% 定义调用的文类名和首级标题。
%    \begin{macrocode}
\def\@clsname{ctexrep}
\def\@topheading{chapter}
%    \end{macrocode}
% 字体：windows, mac, none, adobe, fandol, founder, etc
%    \begin{macrocode}
\DeclareStringOption[noinput]{fontset}
%    \end{macrocode}
% 学位类型。\kvopt{degree}{phd} （默认）或者 \kvopt{degree}{master}。%%degree：|\FDU@degree| = master, phd
%    \begin{macrocode}
\DeclareStringOption[phd]{degree}
\DeclareVoidOption{phd}{\FDU@setopt{degree=phd}}
\DeclareVoidOption{master}{\FDU@setopt{degree=master}}
%    \end{macrocode}
% 效果：|\FDU@type| = draft, final, print, anony 盲审(anonymous review, blind review)
%  draft: 草稿模式，无封面封底，无图片
%  final: 最终的电子版
%  print: 打印模式，超链接无颜色
%  anony: 盲审模式，目录+正文，无姓名
%    \begin{macrocode}
\DeclareStringOption[final]{type}
\DeclareVoidOption{final}{\FDU@setopt{type=final}}
\DeclareVoidOption{draft}{\FDU@setopt{type=draft}}
\DeclareVoidOption{print}{\FDU@setopt{type=print}}
\DeclareVoidOption{anony}{\FDU@setopt{type=anony}}
%    \end{macrocode}
% 颜色：color, grey
% 页面：\opt{openright}, openany, oneside, twoside
%  openright: default, 每一章从奇数页开始，使用|\cleardoublepage|
%  openany: 
%    \begin{macrocode}
\DeclareBoolOption[true]{openright}
\DeclareComplementaryOption{openany}{openright}
%    \end{macrocode}
% twoside: default, 双面模式
% oneside: 单面模式
%    \begin{macrocode}
\DeclareBoolOption[true]{twoside}
\DeclareComplementaryOption{oneside}{twoside}
%    \end{macrocode}
% 其它：1, 使用实心点号替代空心句号；2, 每行添加行号；3, \pkg{fontspec} 字体编码
%    \begin{macrocode}
\DeclareBoolOption{fullwidthstop}
\DeclareBoolOption{lineno}
\DeclareBoolOption[true]{tuenc}
\DeclareComplementaryOption{euenc}{tuenc}
%    \end{macrocode}
% 未声明选项传递给 \cmd{clsname}
%    \begin{macrocode}
\DeclareDefaultOption{\PassOptionsToClass{\CurrentOption}{\@clsname}}
\ProcessKeyvalOptions{FDU}\relax
%    \end{macrocode}
% 选项传递
%    \begin{macrocode}
\newif\ifFDU@Degree@doctor
\newif\ifFDU@Degree@master
\IfStrEqCase{\FDU@degree}{%
	{phd}{\FDU@Degree@doctortrue\FDU@Degree@masterfalse}%
	{master}{\FDU@Degree@mastertrue\FDU@Degree@doctorfalse}%
}
\newif\ifFDU@Type@draft
\newif\ifFDU@Type@final
\newif\ifFDU@Type@print
\newif\ifFDU@Type@anony
\IfStrEqCase{\FDU@type}{%
	{final}{\FDU@Type@finaltrue}%
	{draft}{\FDU@Type@drafttrue}%
	{print}{\FDU@Type@printtrue}%
	{anony}{\FDU@Type@anonytrue}%
}
%    \end{macrocode}
% 学位选项对页面设置的影响。
%  master: 硕士论文，默认oneside
%  phd: 博士论文，默认openright
%    \begin{macrocode}
\ifFDU@Degree@doctor
	\def\FDU@onetwoside{twoside}
	\def\FDU@openrightany{openright}
\else
	\ifFDU@Degree@master
		\def\FDU@onetwoside{oneside}
		\def\FDU@openrightany{openany}
	\fi
\fi
%    \end{macrocode}
% 用户仍然可以显式地声明页面选项 \opt{oneside}/\opt{twoside} 或者 \opt{openright}/\opt{openany}。
% 这将覆盖由学位选项影响的页面设置。
% 默认设置为: \opt{twoside}, \opt{openright}
%    \begin{macrocode}
\ifFDU@twoside
	\def\FDU@onetwoside{twoside}
\else
	\def\FDU@onetwoside{oneside}
\fi
\ifFDU@openright
	\def\FDU@openrightany{openright}
\else
	\def\FDU@openrightany{openany}
\fi
\PassOptionsToClass{\FDU@openrightany}{\@clsname}
\PassOptionsToClass{\FDU@onetwoside}{\@clsname}
%    \end{macrocode}
% 由于在 \hologo{XeLaTeX} 模式下，\CTeX 文档类会引入 \pkg{graphicx} 宏包，
% 因此在导入文档类之前导入 \pkg{graphicx} 的选项。
%    \begin{macrocode}
\ifFDU@Type@draft
\PassOptionsToPackage{draft}{graphicx}
\typeout{Parse option 'draft' to package 'graphicx'.^^J}
\fi
\ifpdf\relax\else
\ifxetex\relax\else
\PassOptionsToPackage{dvipdfmx}{graphicx}
\typeout{Parse option 'dvipdfmx' to package 'graphicx'.^^J}
\fi\fi
%    \end{macrocode}
% 在 \XeTeX 模式下，默认选项 \opt{tuenc} 使得 \pkg{fontspec} 宏包调用 \texttt{TU} 编码，
% 而 \opt{euenc} 选项会调用旧的 EU 编码。
% 在其它编译引擎下无效。
%    \begin{macrocode}
\ifxetex
\ifFDU@tuenc\PassOptionsToPackage{tuenc}{fontspec}
\else\PassOptionsToPackage{euenc}{fontspec}
\fi
%    \end{macrocode}
% 使用 \pkg{ctexrep} 文类, 选项：小四号字，UTF8编码，取消标题页
%    \begin{macrocode}
\LoadClass[UTF8, zihao=-4, notitlepage, fontset=none]{\@clsname} %[2015/09/15]
%    \end{macrocode}
% \subsection{字体设置}
% \opt{fullwidthstop} 选项：使用全角点号。仅在使用 \XeLaTeX 编译时有效。
%    \begin{macrocode}
\ifxetex\ifFDU@fullwidthstop
\defaultCJKfontfeatures{Mapping=fullwidth-stop} % xecjk after 2013-06-07
\typeout{Mapping fullwidth stop in xetex mode.^^J}
\fi\fi % end ifxetex
%    \end{macrocode}
% 如果没有指定字体，那么自动探测操作系统并设置字体为系统字体。
% 执行 |\ctex_detected_platform: | 命令会定义 |\g__ctex_fontset_tl|，
% 注意后者会被 \pkg{ctex} 自动调用，
% 因此需要使用额外的局部宏保存该值，
% 并显式地重置该命令为 `none'。\\
% 使用 |\g__ctex_fontset_tl|命令载入字体参见 \pkg{ctex} 宏集文档的 14.13节；\\
% |\ctex_detected_platform: | 命令的定义参见 \pkg{ctex} 宏集文档的 14.3.6节。\\
% |\ctex_load_fontset: | 命令和 \opt{fontset} 选项参见 \pkg{ctex} 宏集文档的 14.13节。
%    \begin{macrocode}
\ExplSyntaxOn
\str_if_eq_x:nnTF { \FDU@fontset } { noinput }
{
	\tl_new:N \l__ctex_platforminfo_tl
	\ctex_detected_platform: 
	\tl_set:Nx \l__ctex_platforminfo_tl \g__ctex_fontset_tl
	\tl_gset:Nx \g__ctex_fontset_tl { none } 
	\def\FDU@fonts{\l__ctex_platforminfo_tl}
} {
	\def\FDU@fonts{\FDU@fontset}
}
\ExplSyntaxOff
\ctexset{fontset=\FDU@fonts}
%    \end{macrocode}

% \subsection{载入其它宏包}
% 版式类，在 \hologo{XeTeX} 模式下不引入 \pkg{microtype} 宏包以避免与 \pkg{xeCJK} 可能的冲突
%    \begin{macrocode}
\RequirePackage{geometry}
\ifxetex\else
\RequirePackage{microtype}
\fi
\RequirePackage{fancyhdr}
%    \end{macrocode}
% 数学公式，注意 \pkg{bm} 宏包放在最后导入。
%    \begin{macrocode}
\RequirePackage{amsmath}
\RequirePackage{amssymb}
\RequirePackage{mathtools}
\RequirePackage[amsmath,thmmarks]{ntheorem}
\typeout{Parse options 'amsmath' and 'thmmarks' to package 'ntheorem'.^^J}
\AtEndPreamble{\RequirePackage{bm}}
%    \end{macrocode}
% 图表类宏包
%    \begin{macrocode}
\RequirePackage{array}
\RequirePackage{tabularx}
\RequirePackage{booktabs}
\RequirePackage{calc}
\RequirePackage{caption}
\ifpdf
\RequirePackage{epstopdf}
\else
\ifxetex\relax\else
\RequirePackage{bmpsize}
\fi\fi
%    \end{macrocode}
%
% \subsection{论文设置}
% 页面布局为：A4 纸张，垂直页边距 $1\text{inch}=2.54\text{cm}$, 水平页边距 $1.25\text{inch}=3.17\text{cm}$
%    \begin{macrocode}
\geometry{a4paper,hmargin={1in,1in},vmargin={1.25in,1.25in},headheight=15pt}
%    \end{macrocode}
%
% \opt{lineno} 选项。导入 \pkg{lineno} 宏包以便在 \opt{draft} 模式下可以显示行号。
% 注意 \pkg{lineno} 宏包有一些 bug，需要添加一些补丁 \footnote{补丁命令来自于\\
% \url{http://www.latex-community.org/forum/viewtopic.php?f=4&t=163}}。
%    \begin{macrocode}
\ifFDU@lineno
\RequirePackage[mathlines]{lineno}
\newcommand*\patchAmsMathEnvironmentForLineno[1]{%
	\expandafter\let\csname old#1\expandafter\endcsname\csname #1\endcsname
	\expandafter\let\csname oldend#1\expandafter\endcsname\csname end#1\endcsname
	\renewenvironment{#1}%
	{\linenomath\csname old#1\endcsname}%
	{\csname oldend#1\endcsname\endlinenomath}}%
\newcommand*\patchBothAmsMathEnvironmentsForLineno[1]{%
	\patchAmsMathEnvironmentForLineno{#1}%
	\patchAmsMathEnvironmentForLineno{#1*}}%
\AtBeginDocument{%
	\patchBothAmsMathEnvironmentsForLineno{equation}%
	\patchBothAmsMathEnvironmentsForLineno{align}%
	\patchBothAmsMathEnvironmentsForLineno{flalign}%
	\patchBothAmsMathEnvironmentsForLineno{alignat}%
	\patchBothAmsMathEnvironmentsForLineno{gather}%
	\patchBothAmsMathEnvironmentsForLineno{multline}%
}
\linenumbers
\fi
%    \end{macrocode}
%
% \begin{macro}{\studentID}
% \begin{macro}{\major}
% \begin{macro}{\department}
% \begin{macro}{\affiliation}
% \begin{macro}{\supervisor}
% \begin{macro}{\submitdate}
% 标题页及论文信息。
% 定义的命令包括学号、专业、院系、单位、导师（姓名与职称）、提交日期（年、月、日）等。
% 注意 \cmd{title} 和 \cmd{author} 在标准文档类中已经定义了。
%    \begin{macrocode}
\gdef\@author{\@empty}
\gdef\@studentID{\@empty}
\gdef\@major{\@empty}
\gdef\@department{\@empty}
\gdef\@affiliation{\@empty}
\gdef\@supervisor@name{\@empty}
\gdef\@supervisor@title{\@empty}
\gdef\@submit@year{\@empty}
\gdef\@submit@month{\@empty}
\gdef\@submit@day{\@empty}
\gdef\@CLC{\@empty}
\newcommand{\studentID}[1]{\gdef\@studentID{#1}}
\newcommand{\major}[1]{\gdef\@major{#1}}
\newcommand{\department}[1]{\gdef\@department{#1}}
\newcommand{\affiliation}[1]{\gdef\@affiliation{#1}}
\newcommand{\supervisor}[2]{
	\gdef\@supervisor@name{#1}\gdef\@supervisor@title{#2}}
\newcommand{\submitdate}[3]{
	\gdef\@submit@year{#1}\gdef\@submit@month{#2}\gdef\@submit@day{#3}}
\newcommand{\CLC}[1]{\gdef\@CLC{#1}}
%    \end{macrocode}
% 在匿名模式下这些命令都重置为空（所在单位和中图分类号除外）。
%    \begin{macrocode}
\ifFDU@Type@anony
\renewcommand{\author}[1]{\gdef\@author{\@empty}}
\renewcommand{\studentID}[1]{\gdef\@studentID{\@empty}}
\renewcommand{\major}[1]{\gdef\@major{\@empty}}
\renewcommand{\department}[1]{\gdef\@department{\@empty}}
\renewcommand{\supervisor}[2]{
	\gdef\@supervisor@name{\@empty}
	\gdef\@supervisor@title{\@empty}}
\renewcommand{\submitdate}[3]{
	\gdef\@submit@year{\@empty}
	\gdef\@submit@month{\@empty}
	\gdef\@submit@day{\@empty}}
\fi
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}

% 空白页完全为空，即，不包含页面和页脚。
% 如下的关于 \cmd{cleardoublepage} 的补丁设置来源于 \pkg{fancyhdr} 宏包文档的第14节。
%    \begin{macrocode}
\def\cleardoublepage{\clearpage\if@twoside \ifodd\c@page\else
	\hbox{}\thispagestyle{empty}\newpage
	\if@twocolumn\hbox{}\newpage\fi\fi\fi}
%    \end{macrocode}
%
% 目录编译到节
%    \begin{macrocode}
\setcounter{tocdepth}{1}
\let\oldtoc\tableofcontents
\renewcommand{\tableofcontents}{%
	\clearpage\pagenumbering{roman}\oldtoc\pagestyle{plain}}
%    \end{macrocode}
% \begin{macro}{\setabstractname}
% 摘要包括中文摘要和英文摘要，需要在目录中出现，但没有序号。
% \footnote{设置参考如下链接：\\
% \url{http://www.zhihu.com/question/29413517}\\
% \url{http://liam0205.me/2015/04/10/how-to-list-unnumbered-section-in-the-table-of-contents/}\\
% \url{http://www.tex.ac.uk/FAQ-secnumdep.html}}
%    \begin{macrocode}
\newcounter{secnumdepthReserve}
\setcounter{secnumdepthReserve}{\arabic{secnumdepth}}
\newcommand{\setabstractname}[2]{%
	\def\@cnabstractname{#1}\def\@enabstractname{#2}}
\setabstractname{摘\quad 要}{Abstract}
%    \end{macrocode}
% \end{macro}
% \begin{environment}{cnabstract}
% 中文摘要环境。
%    \begin{macrocode}
\newenvironment{cnabstract}{%
	\setcounter{secnumdepth}{\m@ne}%
	\chapter[中文摘要]{\@cnabstractname}%
}{%
\par\noindent\textbf{中图分类号：}\@CLC
\setcounter{secnumdepth}{\arabic{secnumdepthReserve}}
}
\newcommand{\cnkeyword}[1]{\par\noindent\textbf{关键词：}#1}
%    \end{macrocode}
% \end{environment}
% \begin{environment}{enabstract}
% 英文摘要环境。由于英文摘要紧跟着中文摘要，这里取消之前可能的空白页，即使用 \opt{openany} 样式。
%    \begin{macrocode}
\newenvironment{enabstract}{%
	\setcounter{secnumdepth}{\m@ne}%
	\ctexset{chapter/break=\clearpage}
	\chapter[英文摘要]{\@enabstractname}
}{%\pagestyle{empty}%
\par\noindent\textbf{Chinese Library Classification: }\@CLC
\setcounter{secnumdepth}{\arabic{secnumdepthReserve}}%
\ctexset{chapter/break=\if@openright\cleardoublepage\else\clearpage\fi}
}
\newcommand{\enkeyword}[1]{\par\noindent\textbf{Key words: }#1}
%    \end{macrocode}
% \end{environment}
%
% \begin{macro}{\mainmatter}
% 切换到正文
%    \begin{macrocode}
\newcommand{\mainmatter}{%
	\clearpage
	\pagestyle{fancy}
	\fancyhf{}
	\lhead{\small\kaishu\leftmark}
	\rhead{\thepage}
	\renewcommand{\headrulewidth}{0.8bp}
	\pagenumbering{arabic}
	}
%    \end{macrocode}
% \end{macro}
% 正文各级标题名称与样式设置，显示 \cmd{subsubsection} 的编号
%    \begin{macrocode}
\setcounter{secnumdepth}{3}
\ctexset{chapter/format+={\zihao{3}\bfseries},%
	chapter/beforeskip={1.5cm plus 0.2cm minus 0.1cm},%
	chapter/afterskip={1.2cm plus 0.2cm minus 0.1cm}}
\ctexset{section/name={\S~,~},
	section/format+={\zihao{4}\bfseries},%
	section/number={\arabic{chapter}.\arabic{section}},%
	section/beforeskip={0.6cm plus 0.1cm minus 0.05cm},%
	section/afterskip={0.4cm plus 0.1cm minus 0.05cm}}
\ctexset{subsection/format+={\zihao{-4}\bfseries},%
	subsection/number={\arabic{chapter}.\arabic{section}.\arabic{subsection}},%
	subsection/beforeskip={0.4cm plus 0.1cm minus 0.05cm},%
	subsection/afterskip={0.4cm plus 0.1cm minus 0.05cm}}
\ctexset{subsubsection/format+={\zihao{-4}\bfseries},%
	subsubsection/number={\arabic{chapter}.\arabic{section}.\arabic{subsection}.\arabic{subsubsection}},
	subsubsection/beforeskip={0.3cm plus 0.1cm minus 0.05cm},
	subsubsection/afterskip={0.3cm plus 0.1cm minus 0.05cm}
	}
\ctexset{%
	abstractname={摘要},%
	contentsname={目\quad 录},%
	listfigurename={插\quad 图},%
	bibname={参考文献}}
%    \end{macrocode}
%
% 图表标题格式
%    \begin{macrocode}
\captionsetup{font=small,labelfont=bf,labelsep=quad,width=0.8\textwidth,skip=10pt,belowskip=10pt}
\captionsetup[table]{position=top}
\captionsetup[figure]{position=bottom}
%    \end{macrocode}
%
% 行距20bp，\cmd{linespread} 值为 $20 \text{bp}/(12\text{bp}\times 1.2) = 25/18 \approx 1.39$
%    \begin{macrocode}
\linespread{1.39}
%    \end{macrocode}
%
% 公式、图表编号的计数格式, 在章内计数
%    \begin{macrocode}
\numberwithin{equation}{\@topheading}
\numberwithin{figure}{\@topheading}
\numberwithin{table}{\@topheading}
%    \end{macrocode}
%
%\begin{environment}{acknowledgement}
% 致谢环境
%    \begin{macrocode}
\NewEnviron{acknowledgement}{
	\ifFDU@Type@anony\mbox{}\par\else
	\chapter*{致谢}\thispagestyle{empty}\BODY\fi}
%    \end{macrocode}
% \end{environment}
% 参考文献。使用 \pkg{biblatex} 宏包以及 \opt{gb7714-2015} 样式。
%    \begin{macrocode}
\RequirePackage[style=gb7714-2015]{biblatex}
\renewcommand{\bibfont}{\small}
%    \end{macrocode}
% 导入外部PDF文件。
%    \begin{macrocode}
\RequirePackage{pdfpages}
%    \end{macrocode}
% 超链接设置。在文档开始时导入 \pkg{hyperref} 宏包，注意 \CTeX 文档类已经 \pkg{hyperref} 设置了合适的 \opt{driverfallback}。
%    \begin{macrocode}
\AtBeginDocument{%
\RequirePackage{hyperref}
\hypersetup{pdfsubject={学位论文}}
%    \end{macrocode}
% 根据不同模式设置超链接的颜色与边框
%    \begin{macrocode}
\ifFDU@Type@print
	\hypersetup{allcolors=red}
\else
	\hypersetup{linkcolor=blue} % not necessary to set option `colorlinks=true'
\fi
\ifFDU@Type@draft\relax
\else
	\hypersetup{pdfborder={0 0 0}}
\fi
%    \end{macrocode}
%
% \begin{environment}{definition}
% \begin{environment}{theorem}
% \begin{environment}{axiom}
% \begin{environment}{lemma}
% \begin{environment}{proposition}
% \begin{environment}{corollary}
% \begin{environment}{property}
% \begin{environment}{assumption}
% \begin{environment}{remark}
% \begin{environment}{proof}
% 定制定理类环境的样式。
% 在章内连续编号的环境有
% 定义（definition）、定理（theorem）、公理（axiom）、引理（lemma）、命题（proposition）、推论（corollary）、性质（property）、假设（assumption）。
% 此外，附注（remark）环境单独编号。
% 证明（proof）环境以空心方块作为证毕标志。
%    \begin{macrocode}
\theorembodyfont{\normalfont\kaishu}
\theoremheaderfont{\normalfont\bfseries}
\theoremseparator{\hspace{1ex}}
\theorempreskip{3pt plus 1pt}
\theorempostskip{3pt plus 1pt}
\theoremindent0pt
\newtheorem{definition}{定义}[chapter]
\newtheorem{theorem}[definition]{定理}
\newtheorem{axiom}[definition]{公理}
\newtheorem{lemma}[definition]{引理}
\newtheorem{proposition}[definition]{命题}
\newtheorem{corollary}[definition]{推论}
\newtheorem{property}[definition]{性质}
\newtheorem{assumption}[definition]{假设}
\newtheorem{remark}{注}[chapter]
\newcommand{\qedsymb}{\ensuremath{\Box}}
{
\theoremstyle{nonumberplain}
\theoremheaderfont{\bfseries}
\theorembodyfont{\normalfont}
\theoremseparator{\hspace{1ex}}
\theoremsymbol{\qedsymb}
\theorempostskip{1ex plus 0.3ex}
\newtheorem{proof}{证明}
}
}% end of \AtBeginDocument
%    \end{macrocode}
% \end{environment}
% \end{environment}
% \end{environment}
% \end{environment}
% \end{environment}
% \end{environment}
% \end{environment}
% \end{environment}
% \end{environment}
% \end{environment}
%
%    \begin{macrocode}
%</class>
%    \end{macrocode}
%
% \Finale

\endinput




% fonts are loaded later under xetex mode
%\ifxetex
%\PassOptionsToClass{fontset=none}{\@clsname}
%\fi


%% 绪论
%\newcommand{\setintroductionname}[1]{%
%	\def\@introductionname{#1}}
%\setintroductionname{绪论}
%\newenvironment{introduction}{%
%	\setcounter{secnumdepth}{-2}%
%	\chapter{\@introductionname}%
%	}{%
%	\setcounter{secnumdepth}{\arabic{secnumdepthReserve}}%
%	}

%% 一些数学命令
%\newcommand{\dif}{\mathop{}\!\mathrm{d}}
%\newcommand{\me}{\mathrm{e}}
%\newcommand{\mi}{\mathrm{i}}
%\newcommand{\abs}[1]{\left\lvert#1\right\rvert}
%\newcommand{\norm}[1]{\left\lVert#1\right\rVert}
%\newcommand{\innerprod}[2]{\left\langle#1,#2\right\rangle}

%\endinput
% EOF

%
% \DescribeMacro{\YOURMACRO}
% Put description of |\YOURMACRO| here.
%
% \DescribeEnv{YOURENV}
% Put description of |YOURENV| here. % \StopEventually{\PrintIndex}
%
% 

% \begin{macro}{\YOURMACRO@ONE}
% Put explanation of |\YOURMACRO@ONE|’s implementation here
% \begin{macro}{\YOURMACRO@TWO}
% \begin{macro}{\YOURMACRO@THREE}
%Put explanation of |\YOURMACRO|’s implementation here.\\
%Put explanation of |\YOURMACRO|’s implementation here.\\
%Put explanation of |\YOURMACRO|’s implementation here.
%    \begin{macrocode}
\newcommand{\YOURMACRO}{}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}

%
% \begin{environment}{YOURENV}
% Put explanation of |YOURENV|’s implementation here.
%    \begin{macrocode}
\newenvironment{YOURENV}{}{}
%    \end{macrocode}
% \end{environment}


% renewcommand\maketitle: not change 
%\global\let\thanks\relax
%\global\let\@maketitle\relax
%\global\let\@thanks\@empty
%\global\let\@author\@empty
%\global\let\@date\@empty
%\global\let\@title\@empty
%
%\global\let\title\relax
%\global\let\author\relax
%\global\let\date\relax
%\global\let\and\relax

%\def\thu@define@term#1{
%	 \expandafter\gdef\csname #1\endcsname##1{%
%		\expandafter\gdef\csname thu@#1\endcsname{##1}}
%	 \csname #1\endcsname{}}
% \thu@define@term{cdegree}

% \def\thu@parse@keywords#1{
%	 \expandafter\gdef\csname thu@#1\endcsname{} % todo: need or not?
%	 \expandafter\gdef\csname #1\endcsname##1{
%		 \@for\reserved@a:=##1\do{
%		 \expandafter\ifx\csname thu@#1\endcsname\@empty\else
%		 \expandafter\g@addto@macro\csname thu@#1\endcsname{\ignorespaces\csname thu@#1@separator\endcsname}
%		 \fi
%		 \expandafter\expandafter\expandafter\g@addto@macro%
%		 \expandafter\csname thu@#1\expandafter\endcsname\expandafter{\reserved@a}}}}
%
% \thu@parse@keywords{ckeywords}
% \thu@parse@keywords{ekeywords}

% key commands
% def: \def \let \newcommand \renewcommand
% if: \ifx \ifnum \@ifnextchar
% expand: \expandafter \noexpand
% misc: \relax do nothing \empty := {}

% \long\def \@gobble #1{}
% \long\def \@gobbletwo #1#2{}
% \long\def \@gobblefour #1#2#3#4{}
% \long\def\@firstofone#1{#1}
% \long\def\@firstoftwo#1#2{#1}
% \long\def\@secondoftwo#1#2{#2}

% latex commands
% \m@ne : consant -1
% \z@=0pt, \p@=1pt
%  \chardef: \@ne=1, \tw@=2, \thr@@=3 
% \hb@xt@ \def as {\hbox to} 
% \@namedef{<NAME>}: = \def\<name>, \@nameuse{<NAME>} := \<NAME>
% \fnum@type = Figure \thefigure

% 使用 ltxdoc.sty 定义的标记命令与效果
% command string: \cs{foo}		\foo
% command: \cmd{foo}		\foo
% environment: \env{foo}		foo
% length: \len{foo}		\foo
% count: \cnt{foo}		foo
% primary key: \prm{foo}		<foo>
% mandatory prm: \mprm{foo}	{<foo>}
% optional prm: \oprm{foo}	[<foo>]
% option: \opt{foo}		foo
% key-value option: \kvopt{foo}{bar}	foo=bar
% file name: \file{foo}		foo
% style name: \sty{foo}		foo
% binary file: \bin{foo}	foo
% acronym: acr{Foo}		\textsc{foo}	
% key-value: \keyval 	<key>=<value>
